﻿using System.Xml.Linq;

namespace ZOIL.DataBackend.BaseX
{
    public static class XElementExtensions
    {
        /// <summary>
        /// "Escaped" special XQuery-Characters.
        /// Dabei wird angenommen, dass xml ein XML-Fragment ist und für die Verwendung in einem XQuery aufbereitet werden soll.
        /// Special-Chars:
        ///     { -> {{
        ///     } -> }}
        /// Ersetzt nur solche Elemente die nicht von XElement/Escape-XML abgefangen werdne (wie z.B. & -> wird durch diese ersetzt)
        /// </summary>
        public static string EscapeXQuerySpecialChars(this string xml)
        {
            return xml.Replace("{", "{{").Replace("}", "}}");
        }

        public static XElement EscapeXQuerySpecialChars(this XElement xml)
        {
            foreach (var a in xml.Attributes())
            {
                a.Value = a.Value.EscapeXQuerySpecialChars();
            }

            if (xml.HasElements)
            {
                foreach (var e in xml.Elements())
                {
                    EscapeXQuerySpecialChars(e);
                }
            }
            else
            {
                xml.Value = xml.Value.EscapeXQuerySpecialChars();
            }

            return xml;
        }
        public static XElement EscapeXQuerySpecialCharsIf(this XElement xml, bool condition)
        {
            return condition ? EscapeXQuerySpecialChars(xml) : xml;
        }
    }
}